package com.gu.auxiliaryToolsClass;

import java.util.Random;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @Author: gusongliao
 * @Description: Semaphore 示例 模拟6辆车使用3个车位停车，【等待】，停车，离开
 * @createDate 2023/05/28 17:19
 */
public class SemaphoreDemo {

    public static void main(String[] args) {

        Semaphore semaphore = new Semaphore(3); // 表示有三个许可证、3个车位

        for (int i = 1; i <= 6; i++) { // 6辆车依次获取许可证（存在空车位）、停车、离开

            new Thread(() -> {

                try {
                    // 获取许可证，查看是否存在车位
                    semaphore.acquire();

                    // 停进车位
                    System.out.println(Thread.currentThread().getName() + " 号车挺进车位");

                    // 熄火，走人
                    TimeUnit.SECONDS.sleep(new Random().nextInt(5));

                    // 离开停车位
                    semaphore.release();
                    System.out.println(Thread.currentThread().getName() + " -----------号车离开车位");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }, String.valueOf(i)).start();

        }

    }

}
